#include <stdio.h>

#if 0
       #include <stdio.h>

       size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
函数作用：
        从指定的文件中读取数据 ，按块来读取
    参数：
        ptr:你读取的数据存储到该内存空间中，也就是从文件中把数据读取出来之后，存储到这里
        size:每次读取的数据大小，以字节为单位  也就是每一块的字节数
        nmemb:读取的块数
        stream：文件指针，你要读取的文件，将这个文件传递进来    
    返回值：
        成功：返回读取到 一整块的块数
            如果返回值返回的块数 少于 原本你要读取的块数
                1、可能是文件已经读取到末尾了
                2、也有可能是文件出错了
       
        失败：返回0

比如：有一个文件98个字节
       int ret = fread(ptr,20, 5,fp); 
注意：返回值 是成功读取到的  完整块的块数

第一次读 20个字节    1
第二次读 20个字节    1
第三次读 20个字节    1
第四次读 20个字节    1
第五次读 18个字节    0  --因为一块是20个字节，最后一次不满20个字节，但是也读了


判断文件是否到达末尾
int feof(FILE *stream);

返回值：如果到位末尾则返回 非0   如果没有到达末尾则返回0


判断文件是否出错
 int ferror(FILE *stream);
 返回值：如果文件出错 返回 非0   没错返回0
#endif 

int main()
{
    //1、打开文件  文件必须存在 
    FILE *fp = fopen("a.txt","rb");
    if(fp == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //读取数据fread
    char buf[1024] = {0};
    int ret = fread(buf,20,5, fp);
    if(ret < 5){
        //要么读完了
        if(feof(fp) != 0)
        {
            printf("文件读取完毕\n");
        }
        //要么出错了
        if(ferror(fp) != 0)
        {
            printf("文件读取出错\n");
            return -1;
        }
    }
    printf("ret = %d buf：%s\n", ret,buf);

    fclose(fp);

    return 0;
}